import os
import sys
import logging
from pyngrok import ngrok, conf

# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('ngrok_starter')

def start_ngrok(port=5000):
    """启动ngrok隧道并打印公网URL"""
    try:
        # 获取环境变量中的NGROK_AUTH_TOKEN，如果有的话
        auth_token = os.environ.get("NGROK_AUTH_TOKEN")
        if auth_token:
            logger.info("使用环境变量中的NGROK_AUTH_TOKEN")
            conf.get_default().auth_token = auth_token
        
        # 设置区域（如果需要）
        # ngrok.set_region("us")
        
        # 开启http隧道
        logger.info(f"正在为端口 {port} 创建ngrok隧道...")
        public_url = ngrok.connect(port).public_url
        
        logger.info(f"ngrok隧道创建成功！")
        logger.info(f"公网访问地址: {public_url}")
        logger.info(f"API访问示例: {public_url}/extract?url=YOUR_IMAGE_URL")
        logger.info("按Ctrl+C停止服务")
        
        # 保持程序运行
        while True:
            import time
            time.sleep(1)
            
    except Exception as e:
        logger.error(f"启动ngrok隧道时出错: {e}")
        if "account is limited to 1 simultaneous ngrok agent" in str(e):
            logger.error("您的ngrok账户限制只能运行一个隧道，请先关闭任何其他正在运行的ngrok进程")
            logger.error("或者访问 https://dashboard.ngrok.com/agents 查看并关闭活跃的会话")
        sys.exit(1)

if __name__ == "__main__":
    # 默认端口5000，可以通过命令行参数修改
    port = 5000
    if len(sys.argv) > 1:
        try:
            port = int(sys.argv[1])
        except ValueError:
            logger.error(f"无效的端口号: {sys.argv[1]}")
            sys.exit(1)
    
    start_ngrok(port)
